-- 1.参数列表
-- 1.1.优惠券id
local voucherId = ARGV[1]  -- 行1
-- 1.2.用户id
local userId = ARGV[2]     -- 行2
-- 1.3.订单id
local orderId = ARGV[3]    -- 行3

-- 2.数据key
-- 2.1.库存key
local stockKey = 'seckill:stock:' .. voucherId  -- 行6
-- 2.2.订单key
local orderKey = 'seckill:order:' .. voucherId  -- 行7

-- 3.脚本业务
-- 3.1.获取库存（处理nil场景）
local stock = redis.call('get', stockKey)  -- 行10
-- 若库存不存在（nil），视为库存为0
if stock == nil then  -- 行11
    stock = '0'       -- 行12
end
-- 转换为数字（处理非数字字符串场景）
local stockNum = tonumber(stock)  -- 行14
if stockNum == nil then           -- 行15
    return 3  -- 返回3表示库存值无效（非数字）  -- 行16
end

-- 3.2.判断库存是否充足（此时stockNum必为数字，不会nil）
if stockNum <= 0 then  -- 行19（重点修复此行）
    return 1  -- 库存不足  -- 行20
end

-- 3.3.判断用户是否已下单（sismember返回0或1，不会nil）
local isOrdered = redis.call('sismember', orderKey, userId)  -- 行23
if isOrdered == 1 then  -- 行24
    return 2  -- 重复下单  -- 行25
end

-- 3.4.扣减库存
redis.call('incrby', stockKey, -1)  -- 行28

-- 3.5.记录下单用户
redis.call('sadd', orderKey, userId)  -- 行31

-- 3.6.发送消息到队列
redis.call('xadd', 'stream.orders', '*', 'userId', userId, 'voucherId', voucherId, 'id', orderId)  -- 行34

return 0  -- 成功  -- 行36